package main

import "fmt"

/*
定义类型：type 类型名字 底层类型
*/

// 高度&宽度
type Height int
type Weight int

// 坐标
type Coordinate struct {
	h     Height `json:"h"`
	w     Weight `json:"w"`
	info1 Info
	info2 *Info
}

// 信息
type Info struct {
	id   int
	name string
}

func main() {
	coo := new(Coordinate)
	coo.h = 1
	coo.w = 2

	i1 := Info{1, "info1"}
	i2 := Info{2, "info2"}

	coo.info1 = i1
	coo.info2 = &i2

	fmt.Println(*coo, *coo.info2) //{1 2 {1 info1} 0xc00010e078} {2 i2}
	// 不使用指针，一旦赋值之后，内存地址就会发生变化
	fmt.Printf("%p %p\n", &coo.info1, &i1) //0xc000138490 0xc00010e060

	// 修改i1  i2
	i1.name = "i1"
	i2.name = "i2"
	fmt.Println(*coo, *coo.info2) //{1 2 {1 info1} 0xc00010e078} {2 i2}

	fmt.Printf("%p %p\n", &coo.info1, &i1) //0xc000138490 0xc00010e060
}
